#ifndef __PARTICLE_H__
#define __PARTICLE_H__

#include "vec.h"

// Particle class containing both the position of a single particle in phase space, force accumulators, and inherent attributes (mass)
// We assume that mass remains constant - ie. the particle doesn't break into pieces or anything like that

class Particle {

public:

	Particle(Vec3d initialPosition, Vec3d initialVelocity, double mass);

	Vec3d getPosition();
	Vec3d getVelocity();
	Vec3d getForce();
	double getMass(); 

	virtual void setPosition(Vec3d newPosition);
	virtual void setVelocity(Vec3d newVelocity);

	virtual void accumulateForce(Vec3d newForce);
	void clearAccumulator();

protected:
	Vec3d position;
	Vec3d velocity;
	Vec3d force_accumulator;
	double mass;

};

#endif